package xin.marcher.module.attribute.converter;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import xin.marcher.module.attribute.domain.dto.*;
import xin.marcher.module.attribute.domain.entity.*;
import xin.marcher.module.attribute.domain.request.*;
import xin.marcher.module.common.core.PageResult;

import java.util.List;

/**
 *
 */
@Mapper(componentModel = "spring")
public interface AttributeConverter {

    /**
     * 对象克隆
     */
    @Mapping(target = "updateUser", source = "operateUser")
    AttributeInfoDO convertAttributeInfoDO(AttributeInfoRequest request);

    /**
     * 对象克隆
     */
    List<AttributeValueDO> convertAttributeValueV2DOList(List<AttributeValueRequest> list);

    /**
     * 对象克隆
     */
    @Mapping(target = "updateUser", source = "operateUser")
    AttributeGroupDO convertAttributeGroupDO(AttributeGroupRequest request);

    /**
     * 对象克隆
     */
    @Mapping(target = "updateUser", source = "operateUser")
    AttributeTemplateDO convertAttributeTemplateDO(AttributeTemplateRequest request);

    /**
     * 对象克隆
     */
    @Mapping(target = "updateUser", source = "operateUser")
    List<AttributeTemplateContentDO> convertAttributeTemplateContentDOList(List<AttributeTemplateContentRequest> list);

    /**
     * 对象克隆
     */
    PageResult<AttributeInfoDTO> convertAttributeInfoDTOPageResult(Page<AttributeInfoDO> pageResult);

    /**
     * 对象克隆
     */
    AttributeInfoDTO convertAttributeInfoDTO(AttributeInfoDO attributeInfoDO);

    /**
     * 对象克隆
     */
    List<AttributeValueDTO> convertAttributeValueV2DTOList(List<AttributeValueDO> attributeValueDOS);

    /**
     * 对象克隆
     */
    @Mappings({
            @Mapping(target = "content", source = "records"),
            @Mapping(target = "totalElements", source = "total"),
            @Mapping(target = "number", source = "current"),
            @Mapping(target = "totalPages", source = "pages"),
    })
    PageResult<AttributeGroupDTO> convertAttributeGroupDTOPageResult(Page<AttributeGroupDO> pageResult);

    /**
     * 对象克隆
     */
    PageResult<AttributeTemplateDTO> convertAttributeTemplateDTOPageResult(Page<AttributeTemplateDO> pageResult);

    /**
     * 对象克隆
     */
    List<AttributeTemplateContentDTO> convertAttributeTemplateContentDTOList(List<AttributeTemplateContentDO>
                                                                                     attributeTemplateContentDOS);

    /**
     * 对象克隆
     */
    List<ItemSkuAttributeValueDO> convertItemSkuAttributeValueDOList(List<ItemSkuAttributeValueRequest> list);

    /**
     * 对象克隆
     */
    List<ItemSkuAttributeValueDTO> convertItemSkuAttributeValueDTO(List<ItemSkuAttributeValueDO> itemSkuAttributeValueDOS);

    /**
     * 对象克隆
     */
    List<AttributeGroupDTO> convertAttributeGroupDTOList(List<AttributeGroupDO> attributeGroupDOS);

    /**
     * 对象克隆
     */
    List<AttributeInfoDTO> convertAttributeInfoDTOList(List<AttributeInfoDO> attributeInfoDOS);
}
